#pragma once
#include <iostream>
#include <string>
#include <memory>
#include "Socket.hpp"

using namespace SocketModule;

// 自定义网络版本的计算器
// 客户端给服务器的请求类
class Request
{
public:
    Request() {}
    Request(int x, int y, char oper) : _x(x), _y(y), _oper(oper)
    {
    }
    std::string Serialize()
    {
    }
    bool Deserialize(std::string &in)
    {
    }
    ~Request() {}

private:
    int _x;
    int _y;
    char _oper;
};

// 服务器处理完的结果给客户端的回应类
class Response
{
public:
    Response() {}
    Response(int result, int code) : _result(result), _code(code) {}
    std::string Serialize()
    {
    }
    bool Deserialize(std::string &in)
    {
    }
    ~Response() {}

private:
    int _result;
    int _code; // 用于判断计算结果的正确性
};

//协议需要解决:读取数据完整
//Protocal 类专注于协议解析（如将字节流解析为HTTP请求、RPC调用等）,而不应直接管理网络I/O或客户端身份.
class Protocal
{
public:
    Protocal() {}
    // std::shared_ptr<Socket> 是服务器与客户端通信的唯一通道。每个客户端连接对应一个独立的套接字对象，用于：
    // 读取请求：通过套接字的 read 或 recv 方法接收客户端发送的数据。
    // 发送响应：通过套接字的 write 或 send 方法将处理后的数据返回给客户端。
    // 客户端地址（InetAddr）的作用：身份标识与验证
    // 地址信息的内容：
    // InetAddr 封装了客户端的IP地址和端口号（如 192.168.1.100:54321），是客户端在网络中的唯一标识。
    void GetRequest(std::shared_ptr<Socket> &sock, InetAddr &client)
    {

    }
    ~Protocal() {}

private:
    Request _req;
    Response _resp;
};
